package com.example.thread.d8CompletableFuture1.supplyAsync1;

import com.example.thread.d8CompletableFuture1.SmallTool;

import java.util.concurrent.CompletableFuture;

// 等待上一个异步任务执行完毕之后，再去执行
// 连接两个有依赖关系的任务，结果由第二个任务返回
public class _02_applyToEither {
    public static void main(String[] args) {
        SmallTool.printTimeAndThread("张三走出餐厅，来到公交站");
        SmallTool.printTimeAndThread("等待 700路 或者 800路 公交到来");

        CompletableFuture<String> cf1 = CompletableFuture.supplyAsync(()-> {
            SmallTool.printTimeAndThread("700路公交正在赶来");
            SmallTool.sleepMillis(200);
            return "700路到了";
        }).applyToEither(CompletableFuture.supplyAsync(()-> {  // 哪个线程先执行完，就返回先执行完线程的返回值
            SmallTool.printTimeAndThread("800路公交正在赶来");
            SmallTool.sleepMillis(100);
            return "800路到了";
        }),firstComBus-> firstComBus);

        SmallTool.printTimeAndThread(String.format("%s,小白坐车回家",cf1.join()));  // join（）等待任务执行结束，返回任务结束的结果
    }
}


